package br.com.jmed.control;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;

import br.com.jmed.model.Procedimento;
import br.com.jmed.service.ProcedimentoService;

@ManagedBean(name = "procedimentoControl")
@SessionScoped
public class ProcedimentoControl extends BaseControl implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@EJB
	private ProcedimentoService procedimentoService;

	@Inject
	private Procedimento procedimento;

	private Procedimento procedimentoSelect;

	private List<Procedimento> listProcedimento;

	public String salvarCadastroProcedimento() throws IOException {
		listProcedimento = new ArrayList<Procedimento>();
		procedimento.setUsuarioInclusao(getUsuario());
		procedimento.setDataInclusao(new Date());
		procedimentoService.salvarProcedimento(procedimento);
		this.procedimento = new Procedimento();
		return "/pages/procedimento/procedimentoBusca.xhtml";
	}

	public String novoCadastroProcedimento() throws IOException {
		this.procedimento = new Procedimento();
		this.listProcedimento = new ArrayList<Procedimento>();
		return "/pages/procedimento/procedimentoIncluir.xhtml";
	}

	public String alterarCadastroProcedimento() throws IOException {
		listProcedimento = new ArrayList<Procedimento>();
		procedimentoSelect.setUsuarioAlteracao(getUsuario());
		procedimentoSelect.setDataAlteracao(new Date());
		procedimentoService.atualizarProcedimento(procedimentoSelect);
		procedimentoSelect = new Procedimento();
		return "/pages/procedimento/procedimentoBusca.xhtml";
	}

	public String abrirAlterarProcedimento(Procedimento Procedimento) {
		this.procedimentoSelect = procedimentoService
				.findProcedimentoByCod(Procedimento.getCodigo());
		return "/pages/procedimento/procedimentoAlterar.xhtml";
	}

	public void pesquisarProcedimento() {
		listProcedimento = new ArrayList<Procedimento>();
		if (procedimento.getCodigo() != 0) {
			procedimento = procedimentoService
					.findProcedimentoByCod(procedimento.getCodigo());
			listProcedimento.add(procedimento);
		} else if (!procedimento.getDescricao().trim().equals("")) {
			listProcedimento = procedimentoService
					.findProcedimentoByNome(procedimento.getDescricao());
		} else {
			listProcedimento = procedimentoService.findAllProcedimento();
		}

		procedimento = new Procedimento();
	}

	public List<String> pesquisarAutoCompProcedimento(String prefix) {
		List<String> toReturn = new ArrayList<String>();
		listProcedimento = new ArrayList<Procedimento>();
		listProcedimento = procedimentoService.findAllProcedimento();
		for (Procedimento p : listProcedimento) {
			if (p.getDescricao().startsWith(prefix)) {
				toReturn.add(p.getDescricao());
			}
		}
		return toReturn;
	}

	public ProcedimentoService getProcedimentoService() {
		return procedimentoService;
	}

	public void setProcedimentoService(ProcedimentoService procedimentoService) {
		this.procedimentoService = procedimentoService;
	}

	public Procedimento getProcedimento() {
		return procedimento;
	}

	public void setProcedimento(Procedimento procedimento) {
		this.procedimento = procedimento;
	}

	public Procedimento getProcedimentoSelect() {
		return procedimentoSelect;
	}

	public void setProcedimentoSelect(Procedimento procedimentoSelect) {
		this.procedimentoSelect = procedimentoSelect;
	}

	public List<Procedimento> getListProcedimento() {
		return listProcedimento;
	}

	public void setListProcedimento(List<Procedimento> listProcedimento) {
		this.listProcedimento = listProcedimento;
	}
}
